let covariatObjA = {
    name: '老墨',
    age: 33
};
let covariatObjB = {
    name: '高启强',
    age: 33,
    sex: '男'
};
// 协变 子类型的属性和方法 可以覆盖父类型的属性和方法 并且只多不少
covariatObjA = covariatObjB;
// 逆变 子类型的属性和方法 可以覆盖父类型的属性和方法 但是父类型的属性和方法不能被覆盖
let fnA = (params) => {
    console.log("fnA");
};
let fnB = (params) => {
    console.log("fnB");
};
// 一定是安全的
fnB = fnA; // 正确
fnB(covariatObjB);
// 如果是正确的 就是双向协变
// fnA = fnB // 错误
/*
双向协变需要在tsconfig.json中配置
"strictFunctionTypes": false,                      /* When assigning functions, check to ensure parameters and the return values are subtype-compatible.
*/ 
